home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / graphics / dxlib50.zip / MICROSOF.ZIP / EASYXEX1.BAS < prev    next >
BASIC Source File  |  1995-02-07  |  4KB  |  80 lines

  1. '  This is the first example program in EASYX.DOC translated to Microsoft
  2. 'Basic version 7.0.  The program should be linked with EASYX.LIB.  When
  3. 'developing code in the Microsoft BASIC development environment (QBX), a
  4. 'quick library will also be needed.  See README.DOC for information about
  5. 'constructing quick libraries.  Initialize the environment with the quick
  6. 'library.
  7.  
  8. 'Declarations of all functions in EASYX.LIB which are usable by BASIC.
  9. 'XLIB.LIB is contained within EASYX.LIB; hence, certain of the following
  10. 'functions are actually XLIB procedures.  These are explained in XLIB.DOC.
  11. DECLARE FUNCTION XLIBMEMREQ& ()    'XLIB procedure
  12. DECLARE FUNCTION VCPIMEMREQ& ()    'XLIB procedure
  13. DECLARE FUNCTION DPMIMEMREQ& ()    'XLIB procedure
  14. DECLARE FUNCTION INITXLIB& ()      'XLIB procedure
  15. DECLARE FUNCTION XLIBCONFIG% ()    'XLIB procedure
  16. DECLARE FUNCTION XMALLOC& (BYVAL NOBYTES AS LONG, SEG ADDRESS AS LONG, SEG SIZE AS LONG, SEG HANDLE AS LONG)
  17. DECLARE FUNCTION XFREE& (BYVAL HANDLE AS LONG)
  18. DECLARE FUNCTION XUMALLOC& (BYVAL NOBYTES AS LONG, SEG ADDRESS AS LONG, SEG SIZE AS LONG, SEG HANDLE AS LONG)
  19. DECLARE FUNCTION XUNCOMMIT& (BYVAL HANDLE AS LONG, BYVAL STARTOFFSET AS LONG, BYVAL NOBYTES AS LONG)
  20. DECLARE FUNCTION MAPIOMEM& (BYVAL PHYSADDRESS AS LONG, BYVAL SIZE AS LONG, SEG LOGADDRESS AS LONG)
  21. DECLARE FUNCTION LINADR& (SEG VARIABLE AS ANY)
  22. DECLARE SUB MOVMEM (BYVAL DESTADR AS LONG, BYVAL SOURCEADR AS LONG, BYVAL NOBYTES AS LONG)
  23. DECLARE SUB XFCREATE (SEG CONTROLBLOCK AS ANY)
  24. DECLARE SUB XFOPEN (SEG CONTROLBLOCK AS ANY)
  25. DECLARE SUB XFCLOSE (SEG CONTROLBLOCK AS ANY)
  26. DECLARE SUB XFLOAD (SEG CONTROLBLOCK AS ANY)
  27. DECLARE SUB XFSAVE (SEG CONTROLBLOCK AS ANY)
  28. DECLARE SUB XFREAD (SEG CONTROLBLOCK AS ANY)
  29. DECLARE SUB XFWRITE (SEG CONTROLBLOCK AS ANY)
  30.  
  31. '  EASYX procedures should not be called until XLIB has been initialized
  32. 'by calling the XLIB function INITXLIB.  This is done in code that follows.
  33. 'BASIC complicates this process because it allocates all available DOS memory
  34. 'leaving none for the library.  This situation is corrected by forcing BASIC
  35. 'to release some memory with its SETMEM function.  The memory should be
  36. 'released before calling INITXLIB.  It should also be released before
  37. 'declaring any far data in BASIC.  The XLIB function XLIBMEMREQ tells BASIC
  38. 'how many bytes to release.
  39. '  XLIBMEMREQ can possibly fail.  If so, then it will return a negative
  40. 'number.  Mask the sign bit of this number to obtain an XLIB error code which
  41. 'explains the failure.  See XLIB.DOC for explanation of error codes.
  42. '  If working in the Microsoft BASIC program development environment (QBX),
  43. 'then XLIB needs to be initialized only once.  Hence the foregoing code first
  44. 'calls XLIBCONFIG to determine if XLIB has already been initialized.  This
  45. 'function will return a nonzero value if initialization is complete.
  46. IF XLIBCONFIG = 0 THEN               'See if XLIB already initialized
  47.   TEMP& = XLIBMEMREQ                 'See how much memory to release for XLIB
  48.   IF TEMP& >= 0& THEN                'TEMP& will be negative if error
  49.     IF TEMP& > 0 THEN TEMP& = SETMEM(-TEMP& - 16&)   'Release extra paragraph
  50.     TEMP& = INITXLIB                 'XLIB error code returned in TEMP&
  51.   ELSE
  52.     TEMP& = TEMP& AND &H7FFFFFFF     'Mask sign bit to leave error code only
  53.   END IF
  54.   IF TEMP& <> 0 THEN
  55.     PRINT "Library initialization error:  "; HEX$(TEMP&)
  56.     END
  57.   END IF
  58. END IF
  59.  
  60. DIM ERRCODE AS LONG, NOBYTES AS LONG, XADDRESS AS LONG, XSIZE AS LONG
  61. DIM XHANDLE AS LONG, BUFFERADDRESS AS LONG
  62. DIM BUFFER(1023) AS LONG        '4k buffer
  63.  
  64. NOBYTES = &H10000               'Allocate 64k of extended memory
  65. ERRCODE = XMALLOC(NOBYTES, XADDRESS, XSIZE, XHANDLE)
  66. IF ERRCODE <> 0 THEN
  67.   PRINT "Memory allocation error:  "; HEX$(ERRCODE)
  68.   END
  69. END IF
  70.  
  71. BUFFERADDRESS = LINADR(BUFFER)                'Get linear address of buffer
  72. CALL MOVMEM(XADDRESS, BUFFERADDRESS, 4096)    'Transfer buffer to extended
  73. CALL MOVMEM(BUFFERADDRESS, XADDRESS, 4096)    'Transfer extended to buffer
  74.  
  75. ERRCODE = XFREE(XHANDLE)                      'Release the extended memory
  76. IF ERRCODE <> 0 THEN PRINT "Memory release error:  "; HEX$(ERRCODE)
  77.  
  78. END
  79.  
  80.